home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-03-08 | 5.9 KB | 177 lines | [TEXT/EMAC] |
- ;;;
- ;;; Code to receive Apple events from Think C
- ;;;
-
- (defun tc:do-build-reply (event history)
- (announce-reply history)
- (catch 'failure
- (let* ((dataSize (make-string 4 0))
- (typeCode (make-string 4 0))
- (err (AESizeOfParam event keyLinkError typeCode dataSize)))
- (cond
- ((= err errAEDescNotFound)
- (insert-reply " No link errors.\n"))
- ((not (zerop err))
- (insert-reply " Could not read link errors, got error "
- (error-string err) ".\n")
- (throw 'failure err))
- (t
- (let* ((dataPtr (make-string (extract-internal dataSize 0 'unsigned-long) 0))
- (actualSize (make-string 4 0))
- (err (AEGetParamPtr event keyLinkError typeChar typeCode
- dataPtr dataSize actualSize)))
- (cond
- ((not (zerop err))
- (insert-reply " Could not read link errors, got error "
- (error-string err) ".\n")
- (throw 'failure err))
- (t
- (insert-reply " Link errors:\n"
- "Warning: Think C sends garbage with its link errors!\n"
- "Warning: Use “Check Link” in Think C for a full list of link errors!\n"
- "Here are the first 50 characters of the link errors:\n"
- (substring dataPtr 0 50)
- "\n")))))))
-
- (let* ((error-number-data (make-string 4 0))
- (returnedType (make-string 4 0))
- (actualSize (make-string 4 0))
- (err (AEGetParamPtr event keyErrorNumber
- typeLongInteger returnedType
- error-number-data 4 actualSize)))
- (cond
- ((zerop err)
- (let ((error-number (extract-internal error-number-data 0 'long)))
- (insert-reply " Error number returned in reply is "
- (error-string error-number)
- ".\n")))
- ((= err errAEDescNotFound)
- nil)
- (t
- (insert-reply " Could not read error number of reply, got error "
- (error-string error-number)
- ".\n")
- (throw 'failure err))))
-
- noErr))
-
- (defun tc:do-compile-reply (event history)
- (announce-reply history)
- (let* ((returnedType (make-string 4 0))
- (successful-compile-data (make-string 1 0))
- (actualSize (make-string 4 0))
- (flavor (cdr (assoc 'flavor history)))
- (successful-compile
- (let ((err (AEGetParamPtr event keyCompiled typeBoolean
- returnedType successful-compile-data 1 actualSize)))
- (if (zerop err)
- (not (zerop (extract-internal successful-compile-data 0 'char)))
- nil))))
-
- (if successful-compile
- (cond
- ((equal flavor kCompile)
- (insert-reply " Successful compilation.\n"))
-
- ((equal flavor kMake)
- (insert-reply " Successful make.\n"))
-
- ((or (equal flavor kDisassemble)
- (equal flavor kPreprocess))
- (cond
- ((equal flavor kDisassemble)
- (insert-reply " Successful disassembly.\n"))
- ((equal flavor kPreprocess)
- (insert-reply " Successful preprocessing.\n")))
-
- (let* ((output-list (make-string sizeof-AEDesc 0))
- (err (AEGetParamDesc event keyAEResult typeAEList output-list)))
- (if (not (zerop err))
- (insert-reply " Can't read results.\n")
- (let* ((items-in-list (make-string 4 0))
- (err (AECountItems output-list items-in-list)))
- (if (not (zerop err))
- (insert-reply " Can't read results.\n")
- (let ((items-in-list (extract-internal items-in-list 0 'long)))
- (if (zerop items-in-list)
- (insert-reply " No results returned.\n")
- (let ((buffer (generate-new-buffer
- (cond
- ((equal flavor kDisassemble) "*disassembly*")
- ((equal flavor kPreprocess) "*preprocess*")))))
- (set-buffer buffer)
- (set-window-buffer (get-largest-window) buffer)
- (get-one-string (string-data output-list) 1 items-in-list)
- (subst-char-in-region (point-min) (point-max) 13 10 t)))))
- (AEDisposeDesc output-list)))))
-
- ((equal flavor kCheckSyntax)
- (insert-reply " Syntax is okay.\n")))
-
- ;;; Unsuccessful compilation
- (progn
- (let* ((error-number-data (make-string 4 0))
- (returnedType (make-string 4 0))
- (actualSize (make-string 4 0))
- (err (AEGetParamPtr event keyErrorNumber
- typeLongInteger returnedType
- error-number-data sizeof-int actualSize)))
- (if (zerop err)
- (let ((error-number (extract-internal error-number-data 0 'long)))
- (insert-reply " Error "
- (error-string error-number)
- "\n")))
-
- (let* ((error-list-desc (make-string sizeof-AEDesc 0))
- (err (AEGetParamDesc event keyCompileError typeAEList error-list-desc)))
- (if (zerop err)
- (progn
- (let ((items-in-list (make-string 4 0)))
- (let ((err (AECountItems error-list-desc items-in-list)))
- (if (zerop err)
- (let ((items-in-list (extract-internal items-in-list 0 'long)))
- (get-error-messages error-list-desc 1 items-in-list)))))
- (AEDisposeDesc error-list-desc))))))))
- (bring-emacs-to-the-front)
- noErr)
-
- (defun get-one-string (string-list i n)
- (if (> i n)
- nil
- (let ((data (read-one-list-item string-list i)))
- (if (null data)
- (insert " Can't read the output\n")
- (insert data)))
- (get-one-string string-list (1+ i) n)))
-
- (defun get-error-messages (error-list-desc i n)
- (if (> i n)
- nil
- (let ((dataPtr (read-one-list-item error-list-desc i)))
- (if dataPtr
- (insert-reply
- " File \""
- (extract-internal dataPtr 10 'pascal-string)
- "\"; Line "
- (prin1-to-string (extract-internal (substring dataPtr 2 4) 0 'short))
- ": "
- (extract-internal dataPtr 74 'pascal-string)
- "\n"))
- (get-error-messages error-list-desc (1+ i) n))))
-
- (defun read-one-list-item (desc-list index)
- (let* ((typeCode (make-string 4 0))
- (dataSize-string (make-string 4 0))
- (err (AESizeOfNthItem desc-list index typeCode dataSize-string)))
- (if (not (zerop err))
- nil
- (let* ((theAEKeyword (make-string 4 0))
- (actualSize (make-string 4 0))
- (dataSize-integer (extract-internal dataSize-string 0 'long))
- (dataPtr (make-string dataSize-integer 0))
- (err (AEGetNthPtr desc-list index typeChar theAEKeyword
- typeCode dataPtr dataSize-integer actualSize)))
- (if (not (zerop err))
- nil
- dataPtr)))))
-